//Juega, si puede, una carta del color de la de arriba de la pila
//Si no la hay, juega una que coincida con el número.
//Si no puede jugar ninguna de las anteriores, jugará una carta comodín.
package UnoBots;

import Cards.UnoCard;

public class BotColours extends BotPlayerUNO{
    
    
    public BotColours(String s){
        super(s);
    }
    
    /**
     * This method check the next card to play.
     * @return true if the player have a card to play
     */
    
    @Override
    protected boolean chooseCardToPlay(){
        if (currentGame.getTopCard().getRank().equals(UnoCard.Number.TAKETWO)){
            for (UnoCard c : hand){
                if (c.getRank().equals(UnoCard.Number.TAKETWO)){
                    playCard(c);
                    return true;
                }
            }
        }
        if (currentGame.getTopCard().getRank().equals(UnoCard.Number.TAKEFOUR)){
            for (UnoCard c : hand){
                if (c.getRank().equals(UnoCard.Number.TAKEFOUR)){
                    playCard(c);
                    return true;
                }
            }
        }
        //Busca una carta del mismo color que la que hay en lo alto de la pila.
        for (UnoCard c : hand){
            if (c.getSuit().equals(currentGame.getTopCard().getSuit()) || c.getSuit().equals(currentGame.getColour())){
                playCard(c);
                return true;
            }
        }
        //Si no la encuentra, busca una con el mismo número
        for (UnoCard c : hand){
            if (c.getRank().equals(currentGame.getTopCard().getRank())){
                playCard(c);
                return true;
            }
        }
        //Si tampoco encuentra ninguna, intenta jugar una especial.
        for (UnoCard c : hand){
            if (canPlay(c) && c.isSpecialCard()){
                playCard(c);
                return true;
            }
        }
        //Por último, intentará jugar una carta comodín, roba 4 o cambio de color.
        for (UnoCard c : hand){
            if (c.isJoker()){
                playCard(c);
                return true;
            }
        }
        System.err.println("This should not be shown");
        return false;
    }
}
